// 定义仓库
import { defineStore } from "pinia";
// 引入api接口
import {
  getCategory1ListApi,
  getCategory2ListApi,
  getCategory3ListApi,
} from "@/api/product/category";
// 引入数据模型
import {
  CategoryStateModel,
  Numberable,
  CategoryListModel,
} from "@/types/index";

export const useCategoryStore = defineStore("category", {
  state: (): CategoryStateModel => ({
    category1Id: undefined, // 一级分类id
    category2Id: undefined, // 二级分类id
    category3Id: undefined, // 三级分类id
    category1List: [], // 一级分类列表
    category2List: [], // 二级分类列表
    category3List: [], // 三级分类列表
  }),
  getters: {
    // 获取一级分类Id
    getCategory1Id(): Numberable {
      return this.category1Id;
    },
    // 获取二级分类Id
    getCategory2Id(): Numberable {
      return this.category2Id;
    },
    // 获取三级分类Id
    getCategory3Id(): Numberable {
      return this.category3Id;
    },
    // 获取一级分类列表
    getCategory1List(): CategoryListModel {
      return this.category1List;
    },
    // 获取二级分类列表
    getCategory2List(): CategoryListModel {
      return this.category2List;
    },
    // 获取三级分类列表
    getCategory3List(): CategoryListModel {
      return this.category3List;
    },
  },
  actions: {
    // 请求一级分类列表
    async getCategory1ListAction() {
      // 将获取到的列表存储到变量中
      this.category1List = await getCategory1ListApi();
      // 重新获取一级分类之后所有的之前获取的数据都要重置
      this.category1Id = undefined;
      this.category2Id = undefined;
      this.category3Id = undefined;
      this.category2List = [];
      this.category3List = [];
    },
    // 请获取二级分类列表
    async getCategory2ListAction(category1Id: number) {
      // 获取二级分类列表并存储到变量中
      this.category1Id = category1Id;
      this.category2List = await getCategory2ListApi(category1Id);
      // 重新获取二级分类之后需要进行数据重置
      this.category2Id = undefined;
      this.category3Id = undefined;
      this.category3List = [];
    },
    // 请获取三级分类列表
    async getCategory3ListAction(category2Id: number) {
      this.category2Id = category2Id;
      this.category3List = await getCategory3ListApi(category2Id);
      this.category3Id = undefined;
    },
  },
});
